-- 小鹤双拼转全拼;是为了使用百度云拼音转化为全拼查询云词条
local xh2py = {}

local dmap = {
    ["ah"] = "ang",
    ["eg"] = "eng",
    ["aa"] = "a",
    ["ee"] = "e",
    ["oo"] = "o",
    ["bo"] = "bo",
    ["fo"] = "fo",
    ["mo"] = "mo",
    ["po"] = "po",
    ["wo"] = "wo",
    ["yo"] = "yo",
    ["io"] = "chuo",
    ["uo"] = "shuo",
    ["vo"] = "zhuo",
    ["co"] = "cuo",
    ["do"] = "duo",
    ["go"] = "guo",
    ["ho"] = "huo",
    ["ko"] = "kuo",
    ["lo"] = "luo",
    ["no"] = "nuo",
    ["ro"] = "ruo",
    ["so"] = "suo",
    ["to"] = "tuo",
    ["zo"] = "zuo",
    ["is"] = "chong",
    ["vs"] = "zhong",
    ["cs"] = "cong",
    ["ds"] = "dong",
    ["gs"] = "gong",
    ["hs"] = "hong",
    ["js"] = "jiong",
    ["ks"] = "kong",
    ["ls"] = "long",
    ["ns"] = "nong",
    ["qs"] = "qiong",
    ["rs"] = "rong",
    ["ss"] = "song",
    ["ts"] = "tong",
    ["xs"] = "xiong",
    ["ys"] = "yong",
    ["zs"] = "zong",
    ["bk"] = "bing",
    ["dk"] = "ding",
    ["jk"] = "jing",
    ["lk"] = "ling",
    ["mk"] = "ming",
    ["nk"] = "ning",
    ["pk"] = "ping",
    ["qk"] = "qing",
    ["tk"] = "ting",
    ["xk"] = "xing",
    ["yk"] = "ying",
    ["gk"] = "guai",
    ["hk"] = "huai",
    ["kk"] = "kuai",
    ["uk"] = "shuai",
    ["vk"] = "zhuai",
    ["ik"] = "chuai",
    ["jl"] = "jiang",
    ["ll"] = "liang",
    ["nl"] = "niang",
    ["ql"] = "qiang",
    ["xl"] = "xiang",
    ["gl"] = "guang",
    ["hl"] = "huang",
    ["kl"] = "kuang",
    ["il"] = "chuang",
    ["ul"] = "shuang",
    ["sl"] = "suang",
    ["vl"] = "zhuang",
    ["dx"] = "dia",
    ["jx"] = "jia",
    ["lx"] = "lia",
    ["qx"] = "qia",
    ["xx"] = "xia",
    ["gx"] = "gua",
    ["hx"] = "hua",
    ["kx"] = "kua",
    ["ux"] = "shua",
    ["vx"] = "zhua",
    ["cv"] = "cui",
    ["dv"] = "dui",
    ["gv"] = "gui",
    ["hv"] = "hui",
    ["kv"] = "kui",
    ["rv"] = "rui",
    ["sv"] = "sui",
    ["tv"] = "tui",
    ["zv"] = "zui",
    ["vv"] = "zhui",
    ["iv"] = "chui",
    ["ao"] = "ao",
    ["ou"] = "ou",
    ["uv"] = "shui"
}


local ymap = {
    ["q"] = "iu",
    ["w"] = "ei",
    ["e"] = "e",
    ["r"] = "uan",
    ["t"] = "ue",
    ["y"] = "un",
    ["u"] = "u",
    ["i"] = "i",
    ["p"] = "ie",
    ["a"] = "a",
    ["d"] = "ai",
    ["f"] = "en",
    ["g"] = "eng",
    ["h"] = "ang",
    ["j"] = "an",
    ["z"] = "ou",
    ["c"] = "ao",
    ["b"] = "in",
    ["n"] = "iao",
    ["m"] = "ian"
}

local smap = {
    ['o'] = 'o',
    ['a'] = 'a',
    ['i'] = 'ch',
    ['u'] = 'sh',
    ['v'] = 'zh',
    ['s'] = 's',
    ['c'] = 'c',
    ['f'] = 'f',
    ['y'] = 'y',
    ['x'] = 'x',
    ['q'] = 'q',
    ['w'] = 'w',
    ['r'] = 'r',
    ['t'] = 't',
    ['p'] = 'p',
    ['d'] = 'd',
    ['g'] = 'g',
    ['h'] = 'h',
    ['j'] = 'j',
    ['k'] = 'k',
    ['l'] = 'l',
    ['z'] = 'z',
    ['b'] = 'b',
    ['n'] = 'n',
    ['m'] = 'm'

}

local function utf8_sub(s, i, j)
    i = i or 1
    j = j or -1

    if i < 1 or j < 1 then
        local n = utf8.len(s)
        if not n then return nil end
        if i < 0 then i = n + 1 + i end
        if j < 0 then j = n + 1 + j end
        if i < 0 then i = 1 elseif i > n then i = n end
        if j < 0 then j = 1 elseif j > n then j = n end
    end

    if j < i then return "" end

    i = utf8.offset(s, i)
    j = utf8.offset(s, j + 1)

    if i and j then
        return s:sub(i, j - 1)
    elseif i then
        return s:sub(i)
    else
        return ""
    end
end

local function xhchars2py(str)
    if dmap[str] ~= nil then
        return dmap[str]
    else
        local str0 = utf8_sub(str, 0, 1)
        local str1 = utf8_sub(str, 2, 2)
        local sm = smap[str0]
        local ym = ymap[str1]
        return sm .. ym
    end
end


function xh2py.xhLine2py(strLine)
    local length = #strLine
    local res = ""
    local index = 0
    while index + 1 < length do
        local py = xhchars2py(utf8_sub(strLine, index + 1, index + 2))
        res = res .. py
        index = index + 2
    end
    return res
end

return xh2py
-- local result=xhLine2py("kk")
-- print(result)
